package com.bjsxt;

/**
 * @Author lichunlong lcl253137@alibaba-inc.com
 * @Desc 模板方法类: 银行业务
 * @Date 2021-08-19
 */
public abstract class AbstractBankTemplateMethod {

    /**
     * 模板方法: 定义了一个算法的骨架, 而将一些步骤延迟到子类中; 模板方法可以做成final , 不让子类去覆盖它
     */
    public final void process() {
        this.takeNumber();

        this.transact();

        this.evaluate();
    }

    /**
     * 具体方法
     */
    public void takeNumber() {
        System.out.println("取号排队");
    }

    /**
     * 办理具体的业务: 具体的业务由子类去实现（钩子方法）
     */
    public abstract void transact();

    public void evaluate() {
        System.out.println("反馈评分");
    }

}
